﻿using ExcelDataReader;
using Microsoft.Data.Sqlite;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MsBox.Avalonia.Enums;
using 畜牧业审核程序国产.Models.ToolsClass;
using ExcelDataReader.Log;


namespace 畜牧业审核程序国产.Models
{
    internal class XlsToSqlite
    {
        public static FuncOutCome ExportXlsFilesToSqlite(string[] StrArrXlsFilesPath,IProgress<int> progress)
        {
            FuncOutCome exportOutcome = new FuncOutCome();
            int totalFiles = StrArrXlsFilesPath.Length;
            int processedFiles = 0;
            if (StrArrXlsFilesPath.Length == 0)
            {
                exportOutcome.FuncSuccessCode = FuncOutComeCodeType.Success;
                exportOutcome.Icon =Icon.Error;
                exportOutcome.FuncOutComeInfoArgs = "传入的路径中没有excel文件";
                return exportOutcome;
            }
            //Task[] tasks = new Task[StrArrXlsFilesPath.Length];

            List<ImportOutCome> ListOfImportOutComes = new List<ImportOutCome>();//一个xls路径出错,就返回一个importoutcome对象
            for (int i = 0; i < StrArrXlsFilesPath.Length; i++)
            {
                int 中间变量 = i;
                ImportOutCome importOutCome = ImportXlsToSqlite(StrArrXlsFilesPath[中间变量]);
                if (importOutCome.IsSuccess == false)
                {
                    ListOfImportOutComes.Add(importOutCome);//如果返回的importoutcome是不成功的,那么添加进集合里
                }
                processedFiles++;
                int percentage = (int)((double)processedFiles / totalFiles * 100);
                progress.Report(percentage);
            }

            if (ListOfImportOutComes.Count == 0)//如果集合数量为0,说明没有错误
            {

                exportOutcome.FuncSuccessCode = FuncOutComeCodeType.Success;
                exportOutcome.Icon =Icon.Success;
                
            }
            else // 
            {
                exportOutcome.Icon = Icon.Error;
                exportOutcome.FuncSuccessCode = FuncOutComeCodeType.Error;
                for (int i = 0; i < ListOfImportOutComes.Count; i++)
                {
                    exportOutcome.FuncOutComeInfoArgs += $"路径: {ListOfImportOutComes[i].XlsPath},错误原因:{ListOfImportOutComes[i].InfoArgs}" +
                                Environment.NewLine;
                    
                }
                
            }
            return exportOutcome;
        }
        /// <summary>
        /// 把导入的具体情况用out进行输出
        /// </summary>
        /// <param name="XlsFilePath"></param>
        /// <param name="ExtraMessage"></param>
        /// <returns></returns>
        public static ImportOutCome ImportXlsToSqlite(string XlsFilePath)
        {
            ImportOutCome importOutCome = new ImportOutCome();

            try
            {
                string XlsFileName = Path.GetFileName(XlsFilePath);
                //获取到的xlsfilename是这个格式:330781_A209_20230200_20240625172530.xls
                //获取excel文件名的其中几个字符

                int firstDashIndex = XlsFileName.IndexOf('_');
                int secondDashIndex = XlsFileName.IndexOf('_', firstDashIndex + 1);
                string TableNameInXlsFile =
                    XlsFileName.Substring(firstDashIndex + 1, secondDashIndex - firstDashIndex - 1);
                if (TableNameInXlsFile.Contains("-"))
                {
                    int 横杠index = TableNameInXlsFile.IndexOf("-");
                    TableNameInXlsFile = TableNameInXlsFile.Substring(0, 4);
                }
                string realTableNameInXlsFile = null;
                if (TableNameInXlsFile.Contains("A406"))
                {
                    realTableNameInXlsFile = "A406";
                }
                else
                {
                    realTableNameInXlsFile = TableNameInXlsFile;
                }

                string yearInXlsFileName = XlsFileName.Substring(secondDashIndex + 1, 4);
                string seasonInXlsFileName = XlsFileName.Substring(secondDashIndex + 6, 1);
                string yearAndSeason =
                    $"一套表{yearInXlsFileName}年{ConvertIntToStringOfSeason<string>(seasonInXlsFileName)}";
                string withYearAndSeasonTableName = yearAndSeason + realTableNameInXlsFile;
                // MyDBOperator dBOperator = new MyDBOperator();改用单例模式
                MyDBOperator dBOperator =  MyDBOperator.DBOperatorInstance;
                //把datatable的数据导入到sqlite中

                //先删掉为空的数据
                DataTable dtInXlsFile = ReadXlsFileToDataSet(XlsFilePath);
                List<string> ExcelColumnsNames =
                    dtInXlsFile.Columns.Cast<DataColumn>().Select(col => col.ColumnName).ToList();
                if (ExcelColumnsNames.Contains("调查对象审核错误说明"))
                {
                    importOutCome.IsSuccess = false;
                    importOutCome.InfoArgs = ($"{withYearAndSeasonTableName}有调查对象审核错误说明字段,请重新从平台上下载");
                    ;
                    importOutCome.XlsPath = XlsFilePath;
                    return importOutCome;
                }
                //先删除空行数据
                if (dtInXlsFile != null)
                {
                    DeleteNullRow(dtInXlsFile, "报出日期(日)");
                }



                using (SqliteConnection sqliteCon = new SqliteConnection($"Data Source={MyDBOperator._dbPath}"))
                {
                    sqliteCon.Open();

                    if (withYearAndSeasonTableName.Contains("A209"))
                    {
                        string[] DBNeedcolumnNames =
                        [
                            "调查村编码",
                            "数据处理地",
                            "村",
                            "单位负责人",
                            "填表人",
                            "报出日期(年)",
                            "报出日期(月)",
                            "报出日期(日)",
                            "省",
                            "县",
                            "乡",
                            "市",
                            "期别(年)",
                            "期别(季)",
                            "户编码",
                            "户主姓名",
                            "养殖户(单位)类型",
                            "数量;期末存栏",
                            "数量;期末存栏;25公斤以下仔猪",
                            "数量;期末存栏;待育肥猪",
                            "数量;期末存栏;待育肥猪;50公斤以上",
                            "数量;期末存栏;种猪",
                            "数量;期末存栏;种猪;能繁母猪",
                            "期内增加数量",
                            "期内增加数量;自繁",
                            "期内增加数量;购进",
                            "期内减少数量",
                            "期内减少数量;自宰肥猪数量",
                            "期内减少数量;数量",
                            "期内减少数量;金额",
                            "期内减少数量;重量",
                            "期内减少数量;其他原因减少数量",
                            "期内减少数量;其他原因减少数量;数量",
                            "期内减少数量;其他原因减少数量;金额",
                            "期内减少数量;其他原因减少数量;重量"
                        ];
                        var ExcelLostColumnsNames =
                            DBNeedcolumnNames.Except(ExcelColumnsNames); //找出数据库里要有,但是excel里没有的字段
                        if (ExcelLostColumnsNames.Count() > 0)
                        {
                            string StrExcelLostColumnsNames = null;
                            foreach (var item in ExcelLostColumnsNames)
                            {
                                StrExcelLostColumnsNames += $"“{item.ToString()}”、";
                            }

                            importOutCome.IsSuccess = false;
                            importOutCome.XlsPath = XlsFilePath;
                            importOutCome.InfoArgs =
                                $"{withYearAndSeasonTableName}的{StrExcelLostColumnsNames.Substring(0, StrExcelLostColumnsNames.Length - 1)}缺失,请重新从平台下载数据后再次导入!";
                            return importOutCome;
                        }
                        //SetDBnullToStrZero(dtInXlsFile);
                        dBOperator.ResetOnlyColumnNamesTable(withYearAndSeasonTableName);
                        foreach (DataRow Row in dtInXlsFile.Rows)
                        {
                            for (int i = 0; i < dtInXlsFile.Columns.Count; i++)
                            {
                                if (Row.IsNull(i) || string.IsNullOrWhiteSpace(Row[i].ToString()))
                                {
                                    Row[i] = "0";
                                }
                            }


                            string insetSql =
                                //$"insert into {withYearAndSeasonTableName} (调查村编码,数据处理地,养殖户单位类型,村,单位负责人,填表人,报出日期年," +
                                //$"报出日期月,报出日期日,省,市,县,乡,期别年,期别季,户编码,户主姓名,[期末存栏合计01],[25公斤以下仔猪02]," +
                                //$"[待育肥猪03],[50公斤以上04],[种猪05],[能繁殖母猪06],[当季增加头数07],[自繁08],[购进09],[当季减少头数10],[自宰肥猪头数11]," +
                                //$"[出售肥猪头数（不包括出售待育肥猪）12],[出售肥猪金额13],[出售肥猪重量14],[其它原因减少（包括死亡、疫病捕杀）15], " +
                                //$"[出售25公斤以下仔猪头数16],[出售25公斤以下仔猪金额17],[出售25公斤以下仔猪重量18]) " +
                                $"insert into {withYearAndSeasonTableName} (调查村编码,数据处理地,养殖户单位类型,村,单位负责人,填表人,报出日期年," +
                                $"报出日期月,报出日期日,省,市,县,乡,期别年,期别季,户编码,户主姓名,[期末存栏合计01],[25公斤以下仔猪存栏数02]," +
                                $"[待育肥猪存栏数03],[50公斤以上待育肥猪存栏数04],[种猪存栏数05],[能繁殖母猪存栏数06],[当季增加头数07],[自繁头数08],[购进头数09],[当季减少头数10],[自宰肥猪头数11]," +
                                $"[出售肥猪头数（不包括出售待育肥猪）12],[出售肥猪金额（元）13],[出售肥猪重量（公斤）14],[其它原因减少（包括死亡、疫病捕杀）15], " +
                                $"[出售25公斤以下仔猪头数16],[出售25公斤以下仔猪金额（元）17],[出售25公斤以下仔猪重量（公斤）18]) " +
                                $"values('{Row["调查村编码"].ToString()}', '{(string)Row["数据处理地"]}', '{Row["养殖户(单位)类型"].ToString()}','{Row["村"]}','{Row["单位负责人"]}'," +
                                $"'{Row["填表人"]}','{Row["报出日期(年)"]}','{Row["报出日期(月)"]}','{Row["报出日期(日)"]}','{Row["省"]}','{Row["市"]}','{Row["县"]}','{Row["乡"]}'," +
                                $"'{Row["期别(年)"]}','{Row["期别(季)"]}','{Row["户编码"]}','{Row["户主姓名"]}','{Row["数量;期末存栏"]}','{Row["数量;期末存栏;25公斤以下仔猪"]}'," +
                                $"'{Row["数量;期末存栏;待育肥猪"]}','{Row["数量;期末存栏;待育肥猪;50公斤以上"]}','{Row["数量;期末存栏;种猪"]}','{Row["数量;期末存栏;种猪;能繁母猪"]}'," +
                                $"'{Row["期内增加数量"]}','{Row["期内增加数量;自繁"]}','{Row["期内增加数量;购进"]}','{Row["期内减少数量"]}','{Row["期内减少数量;自宰肥猪数量"]}'," +
                                $"'{Row["期内减少数量;数量"]}','{Row["期内减少数量;金额"]}','{Row["期内减少数量;重量"]}','{Row["期内减少数量;其他原因减少数量"]}','{Row["期内减少数量;其他原因减少数量;数量"]}'," +
                                $"'{Row["期内减少数量;其他原因减少数量;金额"]}','{Row["期内减少数量;其他原因减少数量;重量"]}' )";


                            using (SqliteCommand insertCommand = new SqliteCommand(insetSql, sqliteCon))
                            {
                                insertCommand.ExecuteNonQuery();
                            }
                        }

                        dBOperator.AddImportTime(sqliteCon, withYearAndSeasonTableName);
                        //加上额外的字段
                        List<string> sqlToAddColumns = new List<string>();
                        sqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 当季出栏数 DOUBLE");
                        sqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 当季出栏数 = [自宰肥猪头数11] + [出售肥猪头数（不包括出售待育肥猪）12]");
                        sqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 乡镇代码 STRING");
                        sqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 乡镇代码 = substr(户编码,1,9)");
                        sqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 县代码 STRING");
                        sqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 县代码 = substr(户编码,1,6)");
                        sqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 市代码 STRING");
                        sqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 市代码 = substr(户编码,1,4)");
                        sqlToAddColumns.Add($"alter table {withYearAndSeasonTableName} add column 数据处理县代码 string");
                        sqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 数据处理县代码 = substr(数据处理地,1,6)");

                        for (int i = 0; i < sqlToAddColumns.Count; i++)
                        {
                            dBOperator.ExecuteBySql(sqlToAddColumns[i]);
                        }
                    }
                    else if (withYearAndSeasonTableName.Contains("A210"))
                    {
                        string[] DBNeedcolumnNames =
                        [
                            "调查村编码",
                            "数据处理地",
                            "村",
                            "单位负责人",
                            "填表人",
                            "报出日期(年)",
                            "报出日期(月)",
                            "报出日期(日)",
                            "省",
                            "县",
                            "乡",
                            "市",
                            "期别(年)",
                            "期别(季)",
                            "户编码",
                            "户主姓名",
                            "养殖户(单位)类型",
                            "期末存栏",
                            "期末存栏;肉牛;头",
                            "期末存栏;肉牛;能繁殖母牛;头",
                            "期末存栏;奶牛;头",
                            "期末存栏;奶牛;在产奶牛;头",
                            "期内增加数量;头",
                            "期内增加数量;自繁牛头数;头",
                            "期内增加数量;自繁牛头数;肉牛;头",
                            "期内增加数量;自繁牛头数;奶牛;头",
                            "期内增加数量;购进牛头数;头",
                            "期内增加数量;购进牛头数;肉牛;头",
                            "期内增加数量;购进牛头数;奶牛;头",
                            "期内减少数量;头",
                            "期内减少数量;自宰;头",
                            "期内减少数量;出售肉牛;数量;头",
                            "期内减少数量;出售肉牛;金额;元",
                            "期内减少数量;出售肉牛;重量;公斤",
                            "期内减少数量;牛奶产量;公斤"
                        ];
                        var ExcelLostColumnsNames =
                            DBNeedcolumnNames.Except(ExcelColumnsNames); //找出数据库里要有,但是excel里没有的字段
                        if (ExcelLostColumnsNames.Count() > 0)
                        {
                            string StrExcelLostColumnsNames = null;
                            foreach (var item in ExcelLostColumnsNames)
                            {
                                StrExcelLostColumnsNames += $"“{item.ToString()}”、";
                            }

                            importOutCome.IsSuccess = false;
                            importOutCome.XlsPath = XlsFilePath;
                            importOutCome.InfoArgs =
                                $"{withYearAndSeasonTableName}的{StrExcelLostColumnsNames.Substring(0, StrExcelLostColumnsNames.Length - 1)}缺失,请重新从平台下载数据后再次导入!";
                            return importOutCome;
                        }
                        dBOperator.ResetOnlyColumnNamesTable(withYearAndSeasonTableName);
                        foreach (DataRow Row in dtInXlsFile.Rows)
                        {
                            for (int i = 0; i < dtInXlsFile.Columns.Count; i++)
                            {
                                if (Row.IsNull(i) || string.IsNullOrWhiteSpace(Row[i].ToString()))
                                {
                                    Row[i] = "0";
                                }
                            }

                            string insetSql =
                                     //$"insert into {withYearAndSeasonTableName} (调查村编码,数据处理地,村,单位负责人,填表人,报出日期年," +
                                     //$"报出日期月,报出日期日,省,市,县,乡,期别年,期别季,户编码,户主姓名,养殖户单位类型,[期末存栏头数01],[肉牛02]," +
                                     //$"[能繁殖母牛03],[奶牛04],[在产奶牛05],[当季增加头数06],[自繁07],[肉牛08],[奶牛09],[购进10],[肉牛11]," +
                                     //$"[奶牛12],[期内减少头数13],[自宰肉牛数量14],[出售肉牛数量15], " +
                                     //$"[出售肉牛金额16],[出售肉牛重量17],[当季生牛奶产量18]) " +
                                $"insert into {withYearAndSeasonTableName} (调查村编码,数据处理地,村,单位负责人,填表人,报出日期年," +
                                $"报出日期月,报出日期日,省,市,县,乡,期别年,期别季,户编码,户主姓名,养殖户单位类型,[期末存栏头数01],[肉牛存栏数02]," +
                                $"[能繁殖母牛存栏数03],[奶牛存栏数04],[在产奶牛存栏数05],[当季增加头数06],[自繁头数07],[自繁肉牛头数08],[自繁奶牛头数09],[购进头数10],[购进肉牛头数11]," +
                                $"[购进奶牛头数12],[期内减少头数13],[自宰肉牛数量14],[出售肉牛数量15], " +
                                $"[出售肉牛金额（元）16],[出售肉牛重量（公斤）17],[当季生牛奶产量（公斤）18]) " +
                                $"values('{Row["调查村编码"].ToString()}', '{(string)Row["数据处理地"]}', '{Row["村"]}','{Row["单位负责人"]}'," +
                                $"'{Row["填表人"]}','{Row["报出日期(年)"]}','{Row["报出日期(月)"]}','{Row["报出日期(日)"]}','{Row["省"]}','{Row["市"]}','{Row["县"]}','{Row["乡"]}'," +
                                $"'{Row["期别(年)"]}','{Row["期别(季)"]}','{Row["户编码"]}','{Row["户主姓名"]}','{Row["养殖户(单位)类型"].ToString()}','{Row["期末存栏"]}','{Row["期末存栏;肉牛;头"]}'," +
                                $"'{Row["期末存栏;肉牛;能繁殖母牛;头"]}','{Row["期末存栏;奶牛;头"]}','{Row["期末存栏;奶牛;在产奶牛;头"]}','{Row["期内增加数量;头"]}','{Row["期内增加数量;自繁牛头数;头"]}'," +
                                $"'{Row["期内增加数量;自繁牛头数;肉牛;头"]}','{Row["期内增加数量;自繁牛头数;奶牛;头"]}','{Row["期内增加数量;购进牛头数;头"]}','{Row["期内增加数量;购进牛头数;肉牛;头"]}','{Row["期内增加数量;购进牛头数;奶牛;头"]}'," +
                                $"'{Row["期内减少数量;头"]}','{Row["期内减少数量;自宰;头"]}','{Row["期内减少数量;出售肉牛;数量;头"]}','{Row["期内减少数量;出售肉牛;金额;元"]}','{Row["期内减少数量;出售肉牛;重量;公斤"]}'," +
                                $"'{Row["期内减少数量;牛奶产量;公斤"]}')";
                            using (SqliteCommand insertCommand = new SqliteCommand(insetSql, sqliteCon))
                            {
                                insertCommand.ExecuteNonQuery();
                            }
                        }

                        dBOperator.AddImportTime(sqliteCon, withYearAndSeasonTableName);
                        List<string> ListSqlToAddColumns = new List<string>();
                        ListSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 当季出栏数 DOUBLE");
                        ListSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 当季出栏数 = [自宰肉牛数量14] + [出售肉牛数量15]");
                        ListSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 乡镇代码 STRING");
                        ListSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 乡镇代码 = substr(户编码,1,9)");
                        ListSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 县代码 STRING");
                        ListSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 县代码 = substr(户编码,1,6)");
                        ListSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 市代码 STRING");
                        ListSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 市代码 = substr(户编码,1,4)");
                        ListSqlToAddColumns.Add($"alter table {withYearAndSeasonTableName} add column 数据处理县代码 string");
                        ListSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 数据处理县代码 = substr(数据处理地,1,6)");
                        for (int i = 0; i < ListSqlToAddColumns.Count; i++)
                        {
                            dBOperator.ExecuteBySql(ListSqlToAddColumns[i]);
                        }
                    }
                    else if (withYearAndSeasonTableName.Contains("A211"))
                    {
                        string[] DBNeedcolumnNames =
                        [
                            "调查村编码",
                            "数据处理地",
                            "村",
                            "单位负责人",
                            "填表人",
                            "报出日期(年)",
                            "报出日期(月)",
                            "报出日期(日)",
                            "省",
                            "县",
                            "乡",
                            "市",
                            "期别(年)",
                            "期别(季)",
                            "户编码",
                            "户主姓名",
                            "养殖户(单位)类型",
                            "期末存栏;只",
                            "期末存栏;山羊;只",
                            "期末存栏;山羊;能繁殖母羊;只",
                            "期末存栏;绵羊;只",
                            "期末存栏;绵羊;能繁殖母羊;只",
                            "期内增加数量;只",
                            "期内增加数量;自繁羊头数;只",
                            "期内增加数量;自繁羊头数;山羊;只",
                            "期内增加数量;自繁羊头数;绵羊;只",
                            "期内增加数量;购进羊头数;只",
                            "期内增加数量;购进羊头数;山羊;只",
                            "期内增加数量;购进羊头数;绵羊;只",
                            "期内减少数量;只",
                            "期内减少数量;自宰畜禽数量;只",
                            "期内减少数量;出售肥羊;数量;只",
                            "期内减少数量;出售肥羊;金额;只",
                            "期内减少数量;出售肥羊;重量;公斤",
                            "绵羊毛产量;公斤",
                            "山羊绒产量;公斤"
                        ];
                        var ExcelLostColumnsNames =
                            DBNeedcolumnNames.Except(ExcelColumnsNames); //找出数据库里要有,但是excel里没有的字段
                        if (ExcelLostColumnsNames.Count() > 0)
                        {
                            string StrExcelLostColumnsNames = null;
                            foreach (var item in ExcelLostColumnsNames)
                            {
                                StrExcelLostColumnsNames += $"“{item.ToString()}”、";
                            }

                            importOutCome.IsSuccess = false;
                            importOutCome.XlsPath = XlsFilePath;
                            importOutCome.InfoArgs =
                                $"{withYearAndSeasonTableName}的{StrExcelLostColumnsNames.Substring(0, StrExcelLostColumnsNames.Length - 1)}缺失,请重新从平台下载数据后再次导入!";
                            return importOutCome;
                        }
                        dBOperator.ResetOnlyColumnNamesTable(withYearAndSeasonTableName);
                        foreach (DataRow Row in dtInXlsFile.Rows)
                        {
                            for (int i = 0; i < dtInXlsFile.Columns.Count; i++)
                            {
                                if (Row.IsNull(i) || string.IsNullOrWhiteSpace(Row[i].ToString()))
                                {
                                    Row[i] = "0";
                                }
                            }

                            string insetSql =
                                //$"insert into {withYearAndSeasonTableName} (调查村编码,数据处理地,村,单位负责人,填表人,报出日期年," +
                                //$"报出日期月,报出日期日,省,市,县,乡,期别年,期别季,户编码,户主姓名,养殖户单位类型,[期末存栏只数01],[山   羊02]," +
                                //$"[能繁殖母山羊03],[绵(湖)羊04],[能繁殖母绵羊05],[期内增加只数06],[自繁07],[山   羊08],[绵(湖)羊09],[购进10],[山   羊11]," +
                                //$"[绵(湖)羊12],[期内减少只数13],[自宰羊数量14],[出售羊数量15], " +
                                //$"[出售羊金额16],[出售羊重量17],[当季绵羊毛产量18],[当季山羊绒产量19]) " +
                                $"insert into {withYearAndSeasonTableName} (调查村编码,数据处理地,村,单位负责人,填表人,报出日期年," +
                                $"报出日期月,报出日期日,省,市,县,乡,期别年,期别季,户编码,户主姓名,养殖户单位类型,[期末存栏只数01],[山羊存栏只数02]," +
                                $"[能繁殖母山羊存栏只数03],[绵(湖)羊存栏只数04],[能繁殖母绵羊存栏只数05],[期内增加只数06],[自繁只数07],[山羊自繁只数08],[绵(湖)羊自繁只数09],[购进只数10],[山羊购进只数11]," +
                                $"[绵(湖)羊购进只数12],[期内减少只数13],[自宰羊数量14],[出售羊数量15], " +
                                $"[出售羊金额（元）16],[出售羊重量（公斤）17],[当季绵羊毛产量（公斤）18],[当季山羊绒产量（公斤）19]) " +
                                $"values('{Row["调查村编码"].ToString()}', '{(string)Row["数据处理地"]}', '{Row["村"]}','{Row["单位负责人"]}'," +
                                $"'{Row["填表人"]}','{Row["报出日期(年)"]}','{Row["报出日期(月)"]}','{Row["报出日期(日)"]}','{Row["省"]}','{Row["市"]}','{Row["县"]}','{Row["乡"]}'," +
                                $"'{Row["期别(年)"]}','{Row["期别(季)"]}','{Row["户编码"]}','{Row["户主姓名"]}','{Row["养殖户(单位)类型"].ToString()}','{Row["期末存栏;只"]}','{Row["期末存栏;山羊;只"]}'," +
                                $"'{Row["期末存栏;山羊;能繁殖母羊;只"]}','{Row["期末存栏;绵羊;只"]}','{Row["期末存栏;绵羊;能繁殖母羊;只"]}','{Row["期内增加数量;只"]}','{Row["期内增加数量;自繁羊头数;只"]}'," +
                                $"'{Row["期内增加数量;自繁羊头数;山羊;只"]}','{Row["期内增加数量;自繁羊头数;绵羊;只"]}','{Row["期内增加数量;购进羊头数;只"]}','{Row["期内增加数量;购进羊头数;山羊;只"]}','{Row["期内增加数量;购进羊头数;绵羊;只"]}'," +
                                $"'{Row["期内减少数量;只"]}','{Row["期内减少数量;自宰畜禽数量;只"]}','{Row["期内减少数量;出售肥羊;数量;只"]}','{Row["期内减少数量;出售肥羊;金额;只"]}','{Row["期内减少数量;出售肥羊;重量;公斤"]}'," +
                                $"'{Row["绵羊毛产量;公斤"]}','{Row["山羊绒产量;公斤"]}')";
                            using (SqliteCommand insertCommand = new SqliteCommand(insetSql, sqliteCon))
                            {
                                insertCommand.ExecuteNonQuery();
                            }
                        }

                        dBOperator.AddImportTime(sqliteCon, withYearAndSeasonTableName);
                        List<string> ListSqlToAddColumns = new List<string>();
                        ListSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 当季出栏数 DOUBLE");
                        ListSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 当季出栏数 = [自宰羊数量14] + [出售羊数量15]");
                        ListSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 乡镇代码 STRING");
                        ListSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 乡镇代码 = substr(户编码,1,9)");
                        ListSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 县代码 STRING");
                        ListSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 县代码 = substr(户编码,1,6)");
                        ListSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 市代码 STRING");
                        ListSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 市代码 = substr(户编码,1,4)");
                        ListSqlToAddColumns.Add($"alter table {withYearAndSeasonTableName} add column 数据处理县代码 string");
                        ListSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 数据处理县代码 = substr(数据处理地,1,6)");
                        for (int i = 0; i < ListSqlToAddColumns.Count; i++)
                        {
                            dBOperator.ExecuteBySql(ListSqlToAddColumns[i]);
                        }

                    }
                    else if (withYearAndSeasonTableName.Contains("A212"))
                    {
                        string[] DBNeedcolumnNames =
                        [
                            "调查村编码",
                            "数据处理地",
                            "村",
                            "单位负责人",
                            "填表人",
                            "报出日期(年)",
                            "报出日期(月)",
                            "报出日期(日)",
                            "省",
                            "县",
                            "乡",
                            "市",
                            "期别(年)",
                            "期别(季)",
                            "户编码",
                            "户主姓名",
                            "养殖户(单位)类型",
                            "期末存栏;只",
                            "期末存栏;肉用家禽;只",
                            "期末存栏;蛋用家禽;鸡;只",
                            "期末存栏;蛋用家禽;只",
                            "期末存栏;蛋用家禽;鸡;只",
                            "期内减少数量;只",
                            "期内减少数量;自宰畜禽数量;只",
                            "期内减少数量;自宰畜禽数量;鸡;只",
                            "期内减少数量;出售家禽;数量;只",
                            "期内减少数量;出售家禽;数量;鸡;只",
                            "期内减少数量;出售家禽;出售总金额;元",
                            "期内减少数量;出售家禽;出售总金额;鸡;元",
                            "期内减少数量;出售家禽;重量;公斤",
                            "期内减少数量;出售家禽;重量;鸡;公斤",
                            "产量;公斤",
                            "产量;鸡蛋;公斤"
                        ];
                        var ExcelLostColumnsNames =
                            DBNeedcolumnNames.Except(ExcelColumnsNames); //找出数据库里要有,但是excel里没有的字段
                        if (ExcelLostColumnsNames.Count() > 0)
                        {
                            string StrExcelLostColumnsNames = null;
                            foreach (var item in ExcelLostColumnsNames)
                            {
                                StrExcelLostColumnsNames += $"“{item.ToString()}”、";
                            }

                            importOutCome.IsSuccess = false;
                            importOutCome.XlsPath = XlsFilePath;
                            importOutCome.InfoArgs =
                                $"{withYearAndSeasonTableName}的{StrExcelLostColumnsNames.Substring(0, StrExcelLostColumnsNames.Length - 1)}缺失,请重新从平台下载数据后再次导入!";
                            return importOutCome;
                        }
                        dBOperator.ResetOnlyColumnNamesTable(withYearAndSeasonTableName);
                        foreach (DataRow Row in dtInXlsFile.Rows)
                        {
                            for (int i = 0; i < dtInXlsFile.Columns.Count; i++)
                            {
                                if (Row.IsNull(i) || string.IsNullOrWhiteSpace(Row[i].ToString()))
                                {
                                    Row[i] = "0";
                                }
                            }

                            string insetSql =
                                //$"insert into {withYearAndSeasonTableName} (调查村编码,数据处理地,村,单位负责人,填表人,报出日期年," +
                                //$"报出日期月,报出日期日,省,市,县,乡,期别年,期别季,户编码,户主姓名,养殖户单位类型,[期末存栏只数01],[肉用02]," +
                                //$"[肉鸡03],[蛋用04],[蛋鸡05],[期内减少只数06],[自宰家禽数量07],[活鸡08],[出售家禽数量09],[活鸡10],[出售家禽金额11]," +
                                //$"[活鸡12],[出售家禽重量13],[活鸡14],[当季禽蛋产量15], [鸡蛋16]) " +
                                $"insert into {withYearAndSeasonTableName} (调查村编码,数据处理地,村,单位负责人,填表人,报出日期年," +
                                $"报出日期月,报出日期日,省,市,县,乡,期别年,期别季,户编码,户主姓名,养殖户单位类型,[期末存栏只数01],[肉用家禽存栏只数02]," +
                                $"[肉鸡存栏只数03],[蛋用家禽存栏只数04],[蛋鸡存栏只数05],[期内减少只数06],[自宰家禽数量07],[自宰活鸡数量08],[出售家禽数量09],[出售活鸡数量10],[出售家禽金额（元）11]," +
                                $"[出售活鸡金额（元）12],[出售家禽重量（公斤）13],[出售活鸡重量（公斤）14],[当季禽蛋产量（公斤）15], [鸡蛋产量（公斤）16]) " +
                                $"values('{Row["调查村编码"].ToString()}', '{(string)Row["数据处理地"]}', '{Row["村"]}','{Row["单位负责人"]}'," +
                                $"'{Row["填表人"]}','{Row["报出日期(年)"]}','{Row["报出日期(月)"]}','{Row["报出日期(日)"]}','{Row["省"]}','{Row["市"]}','{Row["县"]}','{Row["乡"]}'," +
                                $"'{Row["期别(年)"]}','{Row["期别(季)"]}','{Row["户编码"]}','{Row["户主姓名"]}','{Row["养殖户(单位)类型"].ToString()}','{Row["期末存栏;只"]}','{Row["期末存栏;肉用家禽;只"]}'," +
                                $"'{Row["期末存栏;肉用家禽;鸡;只"]}','{Row["期末存栏;蛋用家禽;只"]}','{Row["期末存栏;蛋用家禽;鸡;只"]}','{Row["期内减少数量;只"]}','{Row["期内减少数量;自宰畜禽数量;只"]}'," +
                                $"'{Row["期内减少数量;自宰畜禽数量;鸡;只"]}','{Row["期内减少数量;出售家禽;数量;只"]}','{Row["期内减少数量;出售家禽;数量;鸡;只"]}','{Row["期内减少数量;出售家禽;出售总金额;元"]}','{Row["期内减少数量;出售家禽;出售总金额;鸡;元"]}'," +
                                $"'{Row["期内减少数量;出售家禽;重量;公斤"]}','{Row["期内减少数量;出售家禽;重量;鸡;公斤"]}','{Row["产量;公斤"]}','{Row["产量;鸡蛋;公斤"]}')";
                            using (SqliteCommand insertCommand = new SqliteCommand(insetSql, sqliteCon))
                            {
                                insertCommand.ExecuteNonQuery();
                            }
                        }

                        dBOperator.AddImportTime(sqliteCon, withYearAndSeasonTableName);
                        List<string> listSqlToAddColumns = new List<string>();
                        listSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 当季家禽出栏数 DOUBLE");
                        listSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 当季家禽出栏数 = [自宰家禽数量07] + [出售家禽数量09]");
                        listSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 当季鸡出栏数 DOUBLE");
                        //  listSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 当季鸡出栏数 = [活鸡08] + [活鸡10]");
                        listSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 当季鸡出栏数 = [自宰活鸡数量08] + [出售活鸡数量10]");
                        listSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 乡镇代码 STRING");
                        listSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 乡镇代码 = substr(户编码,1,9)");
                        listSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 县代码 STRING");
                        listSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 县代码 = substr(户编码,1,6)");
                        listSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 市代码 STRING");
                        listSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 市代码 = substr(户编码,1,4)");
                        listSqlToAddColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 当季鸡存栏数 double");
                       // listSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 当季鸡存栏数 = [肉鸡03]+[蛋鸡05]");
                        listSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 当季鸡存栏数 = [肉鸡存栏只数03]+[蛋鸡存栏只数05]");
                        listSqlToAddColumns.Add($"alter table {withYearAndSeasonTableName} add column 数据处理县代码 string");
                        listSqlToAddColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 数据处理县代码 = substr(数据处理地,1,6)");
                        for (int i = 0; i < listSqlToAddColumns.Count; i++)
                        {
                            dBOperator.ExecuteBySql(listSqlToAddColumns[i]);
                        }

                    }
                    else if (withYearAndSeasonTableName.Contains("A406"))
                    {
                        string[] DBNeedcolumnNames = new string[]
                        {
                            "组织机构代码", "数据处理地", "综合机关名称", "期别(年)", "期别(季)", "单位负责人", "填表人", "报出日期(年)", "报出日期(月)",
                            "报出日期(日)",
                            "数量;存栏头数（含未断奶小猪）", "数量;其中：能繁殖的母猪", "数量;生猪出栏头数", "数量;存栏头数", "数量;其中：良种及改良种乳牛", "数量;出栏头数",
                            "数量;存栏只数", "数量;出栏只数", "数量;存栏只数_1", "数量;出栏只数_1", "数量;存栏只数_2", "数量;出栏只数_2", "数量;肉类产量",
                            "数量;肉类产量;（省增）猪肉",
                            "数量;肉类产量;牛肉", "数量;肉类产量;羊肉", "数量;肉类产量;禽肉", "数量;肉类产量;兔肉", "数量;肉类产量;其他", "数量;鸡鸭鹅蛋产量",
                            "数量;生牛奶产量_33",
                            "数量;蚕茧产量", "数量;其中：鸡存栏", "数量;其中：鸡出栏"
                        };
                        var ExcelLostColumnsNames =
                            DBNeedcolumnNames.Except(ExcelColumnsNames); //找出数据库里要有,但是excel里没有的字段
                        if (ExcelLostColumnsNames.Count() > 0)
                        {
                            string StrExcelLostColumnsNames = null;
                            foreach (var item in ExcelLostColumnsNames)
                            {
                                StrExcelLostColumnsNames += $"“{item.ToString()}”、";
                            }

                            importOutCome.IsSuccess = false;
                            importOutCome.XlsPath = XlsFilePath;
                            importOutCome.InfoArgs =
                                $"{withYearAndSeasonTableName}的{StrExcelLostColumnsNames.Substring(0, StrExcelLostColumnsNames.Length - 1)}缺失,请重新从平台下载数据后再次导入!";
                            return importOutCome;
                        }
                        dBOperator.ResetOnlyColumnNamesTable(withYearAndSeasonTableName);
                        foreach (DataRow Row in dtInXlsFile.Rows)
                        {
                            for (int i = 0; i < dtInXlsFile.Columns.Count; i++)
                            {
                                if (Row.IsNull(i) || string.IsNullOrWhiteSpace( Row[i].ToString()))
                                {
                                    Row[i] = "0";
                                }
                            }

                            string insetSql =
                                //$"insert into {withYearAndSeasonTableName} (组织机构代码,数据处理地,综合机关名称,期别年,期别季,单位负责人,填表人,报出日期年," +
                                //$"报出日期月,报出日期日,[存栏头数（含未断奶小猪）01],[能繁殖的母猪02]," +
                                //$"[生猪出栏头数03],[牛存栏头数04],[良种及改良种乳牛05],[牛出栏头数06],[羊存栏只数07],[羊出栏只数08],[家禽存栏只数09],[家禽出栏只数10],[兔存栏只数11]," +
                                //$"[兔出栏只数12],[肉类产量13],[猪  肉14],[牛  肉15], [羊  肉16],[禽  肉17],[兔  肉18],[其  它19],[鸡鸭鹅蛋产量20]," +
                                //$"[生牛奶产量21],[蚕茧产量22],[鸡存栏23],[鸡出栏24]) " +
                                $"insert into {withYearAndSeasonTableName} (组织机构代码,数据处理地,综合机关名称,期别年,期别季,单位负责人,填表人,报出日期年," +
                                $"报出日期月,报出日期日,[生猪存栏头数（含未断奶小猪）01],[能繁殖的母猪存栏头数02]," +
                                $"[生猪出栏头数03],[牛存栏头数04],[良种及改良种乳牛存栏头数05],[牛出栏头数06],[羊存栏只数07],[羊出栏只数08],[家禽存栏只数09],[家禽出栏只数10],[兔存栏只数11]," +
                                $"[兔出栏只数12],[肉类产量13],[猪肉产量（吨）14],[牛肉产量（吨）15], [羊肉产量（吨）16],[禽肉产量（吨）17],[兔肉产量（吨）18],[其他肉产量（吨）19],[鸡鸭鹅蛋产量（吨）20]," +
                                $"[生牛奶产量（吨）21],[蚕茧产量（吨）22],[鸡存栏只数23],[鸡出栏只数24]) " +
                                $"values('{Row["组织机构代码"].ToString()}', '{(string)Row["数据处理地"]}', '{Row["综合机关名称"]}','{Row["期别(年)"]}','{Row["期别(季)"]}','{Row["单位负责人"]}'," +
                                $"'{Row["填表人"]}','{Row["报出日期(年)"]}','{Row["报出日期(月)"]}','{Row["报出日期(日)"]}','{Row["数量;存栏头数（含未断奶小猪）"]}','{Row["数量;其中：能繁殖的母猪"]}','{Row["数量;生猪出栏头数"]}','{Row["数量;存栏头数"]}'," +
                                $"'{Row["数量;其中：良种及改良种乳牛"]}','{Row["数量;出栏头数"]}','{Row["数量;存栏只数"].ToString()}','{Row["数量;出栏只数"]}','{Row["数量;存栏只数_1"]}'," +
                                $"'{Row["数量;出栏只数_1"]}','{Row["数量;存栏只数_2"]}','{Row["数量;出栏只数_2"]}','{Row["数量;肉类产量"]}','{Row["数量;肉类产量;（省增）猪肉"]}'," +
                                $"'{Row["数量;肉类产量;牛肉"]}','{Row["数量;肉类产量;羊肉"]}','{Row["数量;肉类产量;禽肉"]}','{Row["数量;肉类产量;兔肉"]}','{Row["数量;肉类产量;其他"]}'," +
                                $"'{Row["数量;鸡鸭鹅蛋产量"]}','{Row["数量;生牛奶产量_33"]}','{Row["数量;蚕茧产量"]}','{Row["数量;其中：鸡存栏"]}','{Row["数量;其中：鸡出栏"]}')";
                            using (SqliteCommand insertCommand = new SqliteCommand(insetSql, sqliteCon))
                            {
                                insertCommand.ExecuteNonQuery();
                            }
                        }

                        dBOperator.AddImportTime(sqliteCon, withYearAndSeasonTableName);
                        List<string> sqlToAddNewColumns = new List<string>();
                        sqlToAddNewColumns.Add(
                            $"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 市代码 string"); //增加"市代码"列
                        sqlToAddNewColumns.Add(
                            $"UPDATE {withYearAndSeasonTableName} SET 市代码 = SUBSTR(组织机构代码, 1, 4)"); //
                        sqlToAddNewColumns.Add(
                            $"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 市 STRING"); //增加"市"字段
                        sqlToAddNewColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 市 =  substr(综合机关名称,1,3)");
                        sqlToAddNewColumns.Add(
                            $"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 县代码 STRING"); //增加"县代码"字段
                        sqlToAddNewColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 县代码 = substr(组织机构代码,1,6)");
                        sqlToAddNewColumns.Add(
                            $"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 乡 STRING"); //增加"乡"字段
                        sqlToAddNewColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 乡 = 综合机关名称");
                        sqlToAddNewColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 乡镇代码 STRING");
                        sqlToAddNewColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 乡镇代码 = substr(组织机构代码,1,9)");
                        sqlToAddNewColumns.Add($"ALTER TABLE {withYearAndSeasonTableName} ADD COLUMN 县 STRING");
                        sqlToAddNewColumns.Add($"UPDATE {withYearAndSeasonTableName} SET 县 = substr(综合机关名称,1,6)");

                        for (int i = 0; i < sqlToAddNewColumns.Count; i++)
                        {
                            dBOperator.ExecuteBySql(sqlToAddNewColumns[i]);
                        }
                    }
                    else
                    {
                        importOutCome.IsSuccess = false;
                        importOutCome.XlsPath = XlsFilePath;
                        importOutCome.InfoArgs = $"解压出来的Excel错误";
                        return importOutCome;
                    }
                }

                importOutCome.IsSuccess = true;
                importOutCome.XlsPath = null;
                importOutCome.InfoArgs = $"导入成功!";
                return importOutCome;
            }
            catch (Exception ex)
            {
                StaticLogger.SystemError($"一套表数据复制到数据库中时出错,错误信息为{ex.Message}");
                StaticLogger.SystemError($"堆栈为{ex.StackTrace},{Environment.NewLine}对象为{ex.Source},{Environment.NewLine}方法为{ex.TargetSite}");
                importOutCome.IsSuccess = false;
                importOutCome.XlsPath = XlsFilePath;
                importOutCome.InfoArgs = ex.Message;
                return importOutCome;
            }
        }


        private static string ConvertIntToStringOfSeason<T>(T IntSeason)
        {
            if (IntSeason is int intvalue)
            {
                if (intvalue == 1)
                {
                    return "第一季度";
                }
                else if (intvalue == 2)
                {
                    return "第二季度";
                }
                else if (intvalue == 3)
                {
                    return "第三季度";
                }
                else if (intvalue == 4)
                {
                    return "第四季度";
                }
                else
                {
                    return "输入整形参数错误";
                }
            }
            else if (IntSeason is string strValue)
            {
                if (strValue.Equals("1") || strValue.Equals("一"))
                {
                    return "第一季度";
                }
                else if (strValue.Equals("2") || strValue.Equals("二"))
                {
                    return "第二季度";
                }
                else if (strValue.Equals("3") || strValue.Equals("三"))
                {
                    return "第三季度";
                }
                else if (strValue.Equals("4") || strValue.Equals("四"))
                {
                    return "第四季度";
                }
                else
                {
                    return "输入字符串参数错误";
                }
            }
            else
            {
                return "数据类型错误";
            }
        }

        public static void UnZipAsync()
        {
        }

        public static DataTable ReadXlsFileToDataSet(string filePath)
        {
            // 注册编码提供程序
            System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

            using (FileStream xlsStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                using (var reader = ExcelReaderFactory.CreateReader(xlsStream))
                {
                    // 读取 Excel 文件并将其转换为 DataSet
                    //第一行作为datatable的列

                    var result = reader.AsDataSet(new ExcelDataSetConfiguration()
                    {
                        ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration()
                        {
                            UseHeaderRow = true // 将第一行作为列名
                        }
                    });
                    // 处理每个工作表
                    foreach (DataTable table in result.Tables)
                    {
                        //System.Console.WriteLine($"Sheet Name: {table.TableName}");
                        //foreach (DataRow row in table.Rows)
                        //{
                        //    foreach (var item in row.ItemArray)
                        //    {
                        //        System.Console.Write($"{item}\t");
                        //    }
                        //    System.Console.WriteLine();
                        //}
                        if (table.TableName.Contains("第一页"))
                        {
                            return table;
                        }
                    }

                    return null;
                }
            }
        }

        private static void SetDBnullToStrZero(DataTable dt)
        {
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        if (row.IsNull(i))
                        {
                            row[i] = "0";
                        }
                    }
                }
            }
        }

        public static void DeleteNullRow(DataTable dataTable, string columnName)
        {
            if (dataTable != null)
            {
                for (int i = dataTable.Rows.Count - 1; i >= 0; i--)
                {
                    DataRow row = dataTable.Rows[i];
                    if (row[columnName] == DBNull.Value || string.IsNullOrEmpty(row[columnName].ToString()))
                    {
                        row.Delete();
                    }
                }

                // 调用 AcceptChanges 方法使删除生效
                dataTable.AcceptChanges();
            }
        }


    }
}
